查看原文
其他

如何用 Substrate 创建一条私有链(上)

Parity PolkaWorld 2020-11-11

本文是 Substrate 开发者中心的教程《创建一条私有链》的第一部分。PolkaWorld 社区正在翻译本文,后续将在 PolkaWorld 网站和公众号上连载,敬请期待。

创建私有网络

在本教程中,我们将练习如何通过 Substrate ,使用你选择的验证人集/授权集来启动区块链网络。

安装 Node Template

当你学习完教程 创建你的第一条 Substrate 链[1] 之后,你应该已经在计算机上编译了 Substrate Node Template[2]v2.0.0-rc3 版本,如果没有的话,请先学习完教程

如果你是有经验的开发人员,倾向于选择跳过该教程,建议你可以根据自述文件中的说明安装节点模板

你需要做哪些事

在正式开始之前,我们先列出了本教程中将要做的事情,如下:

  1. 启动一条基于模板项目的 Substrate 区块链网络
  2. 生成 ed25519 和 sr25519 密钥对,以用作网络授权。
  3. 创建和编辑 chainspec json 文件。

听起来不错?好,那我们开始吧!

从 Alice 和 Bob 开启区块链之旅

在我们生成自己的密钥,并启动一个真正独特的 Substrate 网络之前,让我们从一个名为local的预定义网络规范开始,学习带有两个称为 Alice 和 Bob 的预定义(绝非私有)密钥的基础知识。

本教程的这一部分应在具有单个 Substrate 二进制文件的单个工作站上运行。如果到目前为止,你已经按照本教程进行操作,则说明设置正确。

先从 Alice 开始

Alice (或者正在操作的人) 应该从节点模板存储库根目录运行这些命令。

这里的操作明确显示了 purge-chain 命令。之后我们会忽略此操作。需注意的是,无论何时尝试启动新网络,都应清除旧的链数据。

# Purge any chain data from previous runs
# You will be prompted to type `y`
./target/release/node-template purge-chain --base-path /tmp/alice --chain local
# Start Alice's node
./target/release/node-template \
  --base-path /tmp/alice \
  --chain local \
  --alice \
  --port 30333 \
  --ws-port 9944 \
  --rpc-port 9933 \
  --telemetry-url 'ws://telemetry.polkadot.io:1024 0' \
  --validator

让我们详细了解下这些标记:

节点启动时,您应该会看到类似的输出结果:

2020-06-10 13:19:04 Substrate Node
2020-06-10 13:19:04 ✌️  version 2.0.0-rc3-f5acce1-x86_64-linux-gnu
2020-06-10 13:19:04 ❤️  by Substrate DevHub <https://github.com/substrate-developer-hub>, 2017-2020
2020-06-10 13:19:04 📋 Chain specification: Local Testnet
2020-06-10 13:19:04 🏷  Node name: Alice
2020-06-10 13:19:04 👤 Role: AUTHORITY
2020-06-10 13:19:04 💾 Database: RocksDb at /tmp/alice/chains/local_testnet/db
2020-06-10 13:19:04 ⛓  Native runtime: node-template-1 (node-template-1.tx1.au1)
2020-06-10 13:19:05 🔨 Initializing Genesis block/state (state: 0xf583…2e1c, header-hash: 0x826a…389d)
2020-06-10 13:19:05 👴 Loading GRANDPA authority set from genesis on what appears to be first startup.
2020-06-10 13:19:05 ⏱  Loaded block-time = 6000 milliseconds from genesis on first-launch
2020-06-10 13:19:05 📦 Highest known block at #0
2020-06-10 13:19:05 Using default protocol ID "sup" because none is configured in the chain specs
2020-06-10 13:19:05 🏷  Local node identity is: 12D3KooWQsb4rFifmkZDsTCbjHdZ4GYca1PwDhETKiJnALSSbyEs (legacy representation: QmZoJwxoMLw6mLpYRy6ErXmZdPf62HuLFBFw6yKXwVqaPq)
2020-06-10 13:19:05 〽️ Prometheus server started at 127.0.0.1:9615
2020-06-10 13:19:10 💤 Idle (0 peers), best: #0 (0x826a…389d), finalized #0 (0x826a…389d), ⬇ 0 ⬆ 0
2020-06-10 13:19:15 💤 Idle (0 peers), best: #0 (0x826a…389d), finalized #0 (0x826a…389d), ⬇ 0 ⬆ 0
...

注意

  • 🔨 Initializing Genesis block/state (state: 0xf583…2e1c, header-hash: 0x826a…389d) 显示了节点正在使用哪个创世纪区块。启动下一个节点时,请验证这些值是否相等。
  • 🏷 Local node identity is: 12D3KooWQsb4rFifmkZDsTCbjHdZ4GYca1PwDhETKiJnALSSbyEs... 显示了 Bob 从 Alice 节点启动时将需要的对等ID。

你会注意到,实际上尚未生成任何区块。只有当另一个节点加入网络之后,才会开始产生区块。

通过运行./target/release/node-template --help可以获得有关所有这些标记,以及我未提及的其他标记的更多详细信息。

附加用户界面

通过查看终端中产生的输出,您可以了解很多有关节点的信息。这里有一个非常好的界面展示的示例,叫做 Polkadot-JS Apps,或者简称为 "Apps" 。

可以在您的 Web 浏览器中,导航到 https://polkadot.js.org/apps/#/settings?rpc=ws://127.0.0.1:9944。

某些浏览器(尤其是 Firefox)将无法从 https 网站连接到本地节点。一个简单的解决方法是尝试使用其他浏览器,例如 Chromium。另一个选项是在本地托管此接口[3].

上面提供的链接包含rpc URL 参数,该参数指示 Apps UI 连接到作为其值提供的 URL(在本例中为您的本地节点)。手动配置 Apps UI 以连接到另一个节点:

  • 点击左上方的网络图标


  • 出现一个弹出式下拉菜单。选择最后一个条目,它是使用默认端口 9944 的本地节点


  • 要连接到自定义节点和端口,您只需选择 custom endpoint 来指定端点,然后输入自己的端点即可。这样,您可以使用 Apps UI 的单个实例连接到各个节点。

现在您会看到类似这样的内容:

注意

如果不想在连接到已远程部署的 Substrate 节点时运行托管版本的 Polkadot-JS Apps UI ,则可以配置 ssh 本地端口转以将本地请求转发到远程主机侦听的 ws-port。这超出了本教程的范围,但在本文底部有引用参考。

Bob 的加入

现在,Alice 的节点已建立并正在运行, Bob 可以通过 Alice 的节点引导加入网络。他这部分需要的命令看起来会比较相似。

./target/release/node-template purge-chain --base-path /tmp/bob --chain local
./target/release/node-template \
  --base-path /tmp/bob \
  --chain local \
  --bob \
  --port 30334 \
  --ws-port 9945 \
  --rpc-port 9934 \
  --telemetry-url 'ws://telemetry.polkadot.io:1024 0' \
  --validator \
  --bootnodes /ip4/<Alices IP Address>/tcp/<Alices Port>/p2p/<Alices Peer ID>

这些选项中的大多数已经在上面进行了解释,但是有几点值得一提。

  • 因为这两个节点都在同一台物理计算机上运行,因此 Bob 必须在 --base-path, --port, --ws-port, 和 --rpc-port 几个选项中指定不同的路径。

  • Bob 需要添加

    --bootnodes

    由于 Bob 标记并指定了一个引导节点,即 Alice。那么他必须正确指定 Alice 可以为他提供的这三部分信息。

    • Alice 的 IP 地址,可能是 127.0.0.1
    • Alice 的接口,可能是 30333
    • Alice 的对等 ID,只需从她的日志输出中复制 (在上面的示例输出中应该是12D3KooWQsb4rFifmkZDsTCbjHdZ4GYca1PwDhETKiJnALSSbyEs )

如果一切顺利,则在几秒钟后,节点应对等并开始产生块。您应该在启动 Alice 节点的控制台中看到类似以下内容的行:

...
2020-06-10 13:21:20 💤 Idle (0 peers), best: #0 (0x826a…389d), finalized #0 (0x826a…389d), ⬇ 0 ⬆ 0
2020-06-10 13:21:25 💤 Idle (0 peers), best: #0 (0x826a…389d), finalized #0 (0x826a…389d), ⬇ 0 ⬆ 0
2020-06-10 13:21:27 🔍 Discovered new external address for our node: /ip4/127.0.0.1/tcp/30333/p2p/12D3KooWQsb4rFifmkZDsTCbjHdZ4GYca1PwDhETKiJnALSSbyEs
2020-06-10 13:21:30 ✨ Imported #1 (0xe656…51b4)
2020-06-10 13:21:30 💤 Idle (1 peers), best: #1 (0xe656…51b4), finalized #0 (0x826a…389d), ⬇ 1.4kiB/s ⬆ 1.4kiB/s
2020-06-10 13:21:35 💤 Idle (1 peers), best: #1 (0xe656…51b4), finalized #0 (0x826a…389d), ⬇ 0.6kiB/s ⬆ 0.6kiB/s
2020-06-10 13:21:36 🙌 Starting consensus session on top of parent 0xe6569d5358d6bb16c9f42840d6b67c16d82982aae8d4b726095a943f255e51b4
2020-06-10 13:21:36 🎁 Prepared block for proposing at 2 [hash: 0x607dc092a07c4f86122da627ba9a243e3720087c80618d56b69ffbbf938eada4; parent_hash: 0xe656…51b4; extrinsics (1): [0x55fa…fccf]]
2020-06-10 13:21:36 🔖 Pre-sealed block for proposal at 2. Hash now 0x4e68c8c84d4aa5010feceabbdb6280e72f274c5689a71876397a0aaba2b435e9, previously 0x607dc092a07c4f86122da627ba9a243e3720087c80618d56b69ffbbf938eada4.
2020-06-10 13:21:36 ✨ Imported #2 (0x4e68…35e9)
2020-06-10 13:21:40 💤 Idle (1 peers), best: #2 (0x4e68…35e9), finalized #0 (0x826a…389d), ⬇ 0.8kiB/s ⬆ 0.8kiB/s
2020-06-10 13:21:42 ✨ Imported #3 (0x609b…116e)
2020-06-10 13:21:45 💤 Idle (1 peers), best: #3 (0x609b…116e), finalized #1 (0xe656…51b4), ⬇ 1.0kiB/s ⬆ 1.1kiB/s
...

这些行显示的是 Bob 节点已经实现和 Alice 点对点 (1 peers), 他们已经产生了一些区块 (best: #3 (0x609b…116e)), 已经区块正在被最终确认 (finalized #1 (0xe656…51b4))。

查看启动 Bob 节点的控制台,您应该会看到类似的内容。

一旦确认两个节点都按预期运行,就可以将其关闭。本教程的下一部分将包含必要时用于重新启动节点的命令。

参考

  • 配置 ssh 本地端口转发[4]

参考链接

[1]

创建你的第一条Substrate链: https://substrate.dev/docs/en/tutorials/create-your-first-substrate-chain/

[2]

Substrate Node Template: https://github.com/substrate-developer-hub/substrate-node-template

[3]

在本地托管此接口: https://github.com/polkadot-js/apps#development

[4]

配置 ssh 本地端口转发: https://www.booleanworld.com/guide-ssh-port-forwarding-tunnelling/


Dan Forbes更新于 6/11/2020


原文:https://substrate.dev/docs/en/tutorials/start-a-private-network

翻译:PolkaWorld 社区


  • 欢迎学习 Substrate: 

    https://substrate.dev/

  • 关注 Substrate 进展:

    https://github.com/paritytech/substrate

  • 关注 Polkadot 进展:

    https://github.com/paritytech/polkadot

更多内容:

波卡(Polkadot)研究进展

Polkadot 的治理机制:不仅是链上投票,还要自动执行

波卡的共识是什么? | 波卡百科


扫码关注公众号,回复 “1” 加入波卡群

关注 PolkaWorld

发现 Web 3.0 时代新机遇


点个 “在看” 再走吧!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存